RT-Thread学习笔记 —— UART串口

访问串口设备

应用程序通过 RT-Thread提供的 I/O 设备管理接口来访问串口硬件,相关接口如下所示:

rt_device_find() 查找设备
rt_device_open() 打开设备
rt_device_read() 读取数据
rt_device_write() 写入数据
rt_device_control() 控制设备
rt_device_set_rx_indicate() 设置接收回调函数
rt_device_set_tx_complete() 设置发送完成回调函数
rt_device_close() 关闭设备

查找串口设备

1
2
3
4
rt_device_t rt_device_find(
const char* name); //设备名称

-> 成功返回设备句柄,失败返回RT_NULL

打开设备

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
rt_err_t rt_device_open(rt_device_t dev,                    //设备句柄
rt_uint16_t oflags); //设备访问模式标志

-> 成功返回RT_EOK,失败返回-RT_EBUSY(或其他错误代码)
-> oflags支持以下参数:
#define RT_DEVICE_OFLAG_CLOSE //设备已经关闭
#define RT_DEVICE_OFLAG_RDONLY //以只读方式打开设备
#define RT_DEVICE_OFLAG_WRONLY //以只写方式打开设备
#define RT_DEVICE_OFLAG_RDWR //以读写方式打开设备
#define RT_DEVICE_OFLAG_OPEN //设备已经打开
#define RT_DEVICE_FLAG_STREAM //设备以流模式打开
#define RT_DEVICE_FLAG_INT_RX //设备以中断接收模式打开
#define RT_DEVICE_FLAG_DMA_RX //设备以DMA接收模式打开
#define RT_DEVICE_FLAG_INT_TX //设备以中断发送模式打开
#define RT_DEVICE_FLAG_DMA_TX //设备以DMA发送模式打开

读取数据

1
2
3
4
5
6
rt_size_t rt_device_read(rt_device_t dev,           //设备句柄
rt_off_t pos, //读取数据偏移量
void* buffer, //内存缓冲区指针
rt_size_t size); //读取数据的大小

-> 返回读到数据的实际大小

写入数据

1
2
3
4
5
6
rt_size_t rt_device_write(rt_device_t dev,          //设备句柄
rt_off_t pos, //写入数据偏移量
const void* buffer, //内存缓冲区
rt_size_t size); //写入数据的大小

-> 返回写入数据的实际大小

控制设备

1
2
3
4
5
rt_err_t rt_device_control(rt_device_t dev,         //设备句柄
rt_uint8_t cmd, //控制命令
void* arg); //控制参数

-> 成功返回RT_EOK,失败返回-RT_ENOSYS(或其他错误代码)

设置接收回调函数

1
2
3
4
rt_err_t rt_device_set_rx_indicate(rt_device_t dev,             //设备句柄
rt_err_t (*rx_ind)(rt_device_t dev, rt_size_t size)); //回调函数指针

-> 成功返回RT_EOK

设置发送完成回调函数

1
2
3
4
rt_err_t rt_device_set_tx_complete(rt_device_t dev,             //设备句柄
rt_err_t (*tx_done)(rt_device_t dev, void *buffer)); //回调函数指针

-> 成功返回RT_EOK

关闭设备

1
2
3
rt_err_t rt_device_close(rt_device_t dev);              //设备句柄

-> 成功返回RT_EOK,失败返回-RT_ERROR(或其他错误码)